Streaming of bandwidth intensive content like movies, videos, videoconferencing and video games has become common. One goal when streaming content is to deliver the content data to a receiving user-end device continuously and at a regular and predictable rate in order to sustain an uninterrupted experience for the user. In order to accomplish this, streaming systems use various techniques to adapt to changing bandwidths, network congestion and latency between the end points of a streaming session. Such streaming systems, however, are often inefficient in terms of data storage and computational resources, or otherwise may result in inefficient use of available bandwidth or lead to relatively high instances of data packet loss.